概述
前面的文章我们介绍了 CountDownLatch
,本文我们会继续介绍另外一个并发编程中经常遇到的工具 CyclicBarrier。使用它可以使一组线程相互之间等待,达到一个共同点,再继续执行。
我们可以把它理解成一个障碍,所有的线程必须到齐后才能一起通过这个障碍。
关于它和 CountDownLatch
,可以对比我的上一篇关于 CountDownLatch
的博客。CountDownLatch
更像是一个计数器,等待线程等待计数器为0后才会继续执行。而 CyclicBarrier
是所有参与的线程都要等待达到某个条件后再一起执行。
另外还有重要一点:CountDownLatch
是只触发一次的事件,而 CyclicBarrier
可以多次重用。可以调用 reset()
来实现重用。
使用方法
1 | public void testCyclicBarrier() { |
1 | 19:40:23.017 E/Test: run Thread1 |
所有的线程都到达等待点后,会和 Barrier 线程再一起往下执行。
源码分析
下面来简单的分析一下源码:
1 | public class CyclicBarrier { |